from flask import Blueprint, jsonify, request, session
from flask import render_template
from user_config import UserConfig
import logging
import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 导入日志模块
try:
    from logger import get_module_logger
    logger = get_module_logger('login')
except ImportError:
    # 如果无法导入日志模块，使用基本日志
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger('login')

blueprint = Blueprint('/', __name__, url_prefix='/')

# 登陆校验
@blueprint.route("/", methods=['GET', 'POST'])
def login():
    # 判断是否为post请求
    if request.method == 'POST':
        logger.info("收到登录请求")
        
        # 获取用户名和密码
        username = request.form.get('username')
        password = request.form.get('password')
        
        logger.debug(f"登录尝试 - 用户名: {username}")
        
        # 注意，系统中没有加入数据库，你无需去管任何代码，只需要自己用你喜欢的语言，开发一个接口，只要返回下面这些数据
        # 即可，系统会将这些数据缓存到session中，下次访问时，直接从session中读取数据，无需再从接口中获取
        
        # 判断用户名和密码是否为空
        if username and password:
            # 判断用户名和密码是否正确
            if UserConfig.verify_user(username, password):
                # 保存用户名到 session
                session['username'] = username
                
                # 通过UserConfig获取配置信息
                user_config = UserConfig.get_user_config(username)
                
                # 将配置信息保存到session中
                session['bt_url'] = user_config.get('bt_url')
                session['bt_key'] = user_config.get('bt_key')
                session['bt_fife'] = user_config.get('bt_fife')
                session['bt_web'] = user_config.get('bt_web')
                session['web_size'] = user_config.get('web_size')
                session['sql_size'] = user_config.get('sql_size')
                session['traffic_size'] = user_config.get('traffic_size')
                session['siteId'] = user_config.get('siteId')
                session['sql_pwd'] = user_config.get('sql_pwd')
                
                logger.info(f"用户 {username} 登录成功")
                              
                return jsonify({'code': 200, 'msg': '登录成功'})
            else:
                logger.warning(f"用户 {username} 登录失败 - 用户名或密码错误")
                return jsonify({'code': 400, 'msg': '用户名或密码错误'})
        else:  
            logger.warning("登录失败 - 用户名或密码不能为空")
            return jsonify({'code': 401, 'msg': '用户名或密码不能为空'}) 


    if 'username' in session:
        logger.debug("用户已登录，显示框架页面")
        return render_template('framework.html') 
    else:
        logger.debug("用户未登录，显示登录页面")
        return render_template('login.html')       
    
 

# 退出登录
@blueprint.route("/logout")
def logout():
    username = session.get('username', '未知用户')
    logger.info(f"用户 {username} 退出登录")
    
    # 从 session 中删除用户名，并跳转到登录页面
    session.pop('username', None)
    session.pop('bt_url', None)
    session.pop('bt_key', None)
    session.pop('bt_fife', None)
    session.pop('siteId', None)
    session.pop('web_size', None)
    session.pop('sql_size', None)
    session.pop('traffic_size', None)
    
    return render_template('/login.html')